package com.ftg.learn.assess.result;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author LY
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {

    private Integer code;
    private String msg;
    //如果为null忽略生成
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private T data;

    /**
     * 构建一个带有代码、消息和数据的响应对象
     * <p>
     * 此方法提供了一个通用的响应对象构建方式，通过传入不同的参数来构造不同的响应对象
     * 它可以用于各种场景，如成功响应、错误响应等
     *
     * @param code 响应代码，表示响应的类型或状态
     * @param msg  响应消息，提供更详细的响应信息
     * @param data 响应数据，可以是任何类型的对象，根据具体业务需求决定
     * @param <T>  泛型参数，表示响应数据的类型
     * @return 返回一个泛型类型的R对象，包含代码、消息和数据
     */
    public static <T> Result<T> build(Integer code, String msg, T data) {
        return new Result<>(code, msg, data);
    }
    public static <T> Result<T> build(Integer code, String msg) {
        return new Result<>(code, msg, null);
    }


}
